// 前置守卫
import router from '@/router'
import store from '@/store'

import NProgress from 'nprogress' // 引入进度条
import 'nprogress/nprogress.css' // 引入进度条样式
// 白名单
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  const token = store.getters.token
  //   判断是否有token
  if (token) {
    // 有token 登录了
    if (to.path === '/login') {
      // 在登录页放行去首页
      next('/') // 跳到首页, 被next拦截走的, 不会自动关闭, 因为没有进入到 afterEach, 需要手动关闭
      NProgress.done()
    } else {
    //  有token不在登录页随便去
      if (!store.state.user.userInfo.userId) {
        const res = await store.dispatch('user/getUserinfo')
        console.log('将来要处理的', res)
        // 调用actions，同步到vuex中
        const otherRoutes = await store.dispatch('permission/filterRoutes', res.roles.menus)
        router.addRoutes([
          ...otherRoutes,
          { path: '*', redirect: '/404', hidden: true }
        ])
        next({
          ...to, // next({ ...to })的目的,是保证路由添加完了再进入页面 (可以理解为重进一次
          replace: true // 重进一次不保留重复历史
        })
        return
      }
      next()
    }
  } else {
    //  没有token
    // 判断是否在白名单中
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      NProgress.done()
    }
  }
})

// 后置首位
router.afterEach((to, from) => {
  document.title = to?.meta?.title || '人资管理系统'
  NProgress.done()
})
